package Day16.object;

import java.util.Objects;

/**
 * @author HYHwtx
 * @version 1.0
 * @date 2022/2/23 9:18
 */

/*
*
* == 既可以比较基本数据类型，也可以比较引用数据类型。
比较基本数据类型时，比较的是两个基本类型的值是否相等，相等返回true，不相等返回false；
比较引用数据类型时，比较的是两个引用类型的地址的值，引用地址相同返回true，不相同返回false；
*
* equals 是 Object 类中的方法，用于判断两个对象是否相等，一般有如下两种情况：

类没有覆盖equals方法，用于比较该类的两个对象时，等价于通过“==”比较两个对象，也就是比较两个对象的内存地址；
类覆盖了equals方法，方法实现为两个对象的内容相等则认为这两个对象相等；
*
* "=="和"!="   比较的是"栈"中的内容
 equals()     比较的是"堆"中的内容

* */
public class Equals {
    //equals的重写判断两个Person类方法是否相等。
    public static void main(String[] args) {
        Person person1 = new Person("Tom", 23, '女');
        Person person2 = new Person("Marry", 96, '女');
        System.out.println(person1.equals(person2));

    }
}
//判断两个Person对象内容是否相同，
// 如果两个person的各个属性相同，相同返回true，否则返回false
class Person{
    private String name;
    private  int age;
    private  char gender;


    //当object方法重写

    @Override
    public boolean equals(Object obj) {

        //如果两个对象是一个对象，则返回true
        if (this == obj)
            return true;
        //
        if (obj instanceof  Person)
//        if (obj == null || getClass() != obj.getClass())
            return false;
        Person person = (Person) obj;
        return age == person.age &&
                gender == person.gender &&
                Objects.equals(name, person.name);
    }

    public Person(String name, int age, char gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }
}